// 对axios进行的二次封装;
// 封装的目的，是使用axios的请求和响应拦截器.

import axios from 'axios';
import { ElMessage } from 'element-plus';
//import useUserStore from '@/store/modules/user';

// 第一步，利用axios对象的create方法，去创建 axios实例(其他配置，基础路径，超时时间)\
const request = axios.create({
    // 基础路径;
    baseURL: import.meta.env.VITE_APP_BASE_API, // 基础路径上会携带api.
    timeout: 50000, // 发请求的超市设置.
    headers: {
        'Content-Type': 'application/json', // 如果后端需要
    },
});

// 第二步. request实例添加请求和响应拦截器.
// request.interceptors.request.use((config) => {
//     // config配置对象， headers属性请求头，经常给服务器端携带公共参数.

//     // const userStore = useUserStore();
//     // if (userStore.token) {
//     //     config.headers.token = userStore.token;
//     // }

//     //console.log(userStore.token);
//     // 要返回配置的对象;

//     if(config) {
//         console.log('请求地址:', config.baseURL + config.url); // 打印改写前的请求地址
//     }

//     return config;
// });

request.interceptors.request.use(
    (config) => {
      console.log('请求地址:', config.baseURL + config.url); // 打印改写前的请求地址
      return config;
    },
    (error) => {
      return Promise.reject(error);
    }
  );


// 第三步: 配置响应拦截器.
request.interceptors.response.use((resp) => {
    // 成功回调
    //console.log("request.response", resp);
    // 简化数据;
    //return "abc122334";
    console.log(resp.request.responseURL + ":");
    console.log(resp.data);
    return resp.data;
},
    (error) => {

        if (error.response) {
            console.error('后端返回错误:', error.response.data);
          } else {
            console.error('请求失败:', error.message);
          }

        console.error('请求失败:', error.response ? error.response.config.url : error.message); // 输出错误信息
        // 失败的回调，一般处理http的网络错误;
        console.log(error);
        // 定义一个变量，存储网络错误的信息;
        let message = '';
        // http状态码.
        const status = error.response.status;
        switch (status) {
            case 401:
                message = 'TOKEN过期';
                break;
            case 403:
                message = '无权访问';
                break;
            case 404:
                message = '请求地址错误';
                break;
            case 500:
                message = '服务器内部错误';
                break;
            default:
                message = '网络错误';
                break;
        }
        ElMessage({
            type: 'error',
            message
        })
        return Promise.reject(error);
    });

export default request;